package com.kkwrite.regimen.provider.service.item;

import com.kkwrite.regimen.common.entity.dto.item.ItemDetailDTO;
import com.kkwrite.regimen.common.entity.dto.order.OrderReviewQueryOutDTO;
import com.kkwrite.regimen.common.entity.dto.shop.PageableItemDTO;
import com.kkwrite.regimen.provider.exception.ServiceException;

import java.util.List;

/**
 * 项目服务类
 *
 * @author Soosky Wang
 * @version 1.0.0
 * @date 2018年7月20日 下午5:32:16
 */
public interface ItemService {

    /**
     * 获取店铺详情
     *
     * @param itemId itemId
     * @return ItemDetailDTO
     * @throws ServiceException 异常
     */
    ItemDetailDTO getItemDetail(Long itemId) throws ServiceException;
    /**
     * 获取店铺详情
     *
     * @param itemId itemId
     * @return ItemDetailDTO
     * @throws ServiceException 异常
     */
    ItemDetailDTO getItemDetail(Long itemId,String city) throws ServiceException;

    /**
     * 根据项目ID查询项目评价
     *
     * @param itemId 项目ID
     * @return List&lt;List&lt;OrderReviewQueryOutDTO&gt;&gt;
     * @throws ServiceException 需要捕获的异常，封装异常信息返回
     */
    List<List<OrderReviewQueryOutDTO>> queryReview(Integer itemId) throws ServiceException;

    /**
     * 分页查询首页项目
     *
     * @param city     城市
     * @param sort     排序字段
     * @param sortType 排序类型
     * @param page     页码
     * @param pageSize 每页大小
     * @return List&lt;ItemDetailDTO&gt;
     */
    List<ItemDetailDTO> getIndexItemPageable(String city, Integer itemType, Integer sort, Integer sortType, Integer page, Integer pageSize);

    /**
     * 根据项目 id 统计店铺
     *
     * @param itemId
     * @return
     * @throws ServiceException
     */
    Integer countShopNumByItemId(Long itemId,String city) throws ServiceException;

    /**
     * 增加评价数量
     *
     * @param itemId      项目ID
     * @param reviewCount 增加的评价数量
     */
    void reviewCountPlus(int itemId, int reviewCount);

    /**
     * 增加销量
     * @param itemId 项目ID
     * @param count 需要增加的数量
     */
    void saleCountPlus(int itemId, int count);
    
    /**
     * 查询系统中项目分页列表
     * @param page 页码
     * @param size 每页大小
     * @param sortType 排序类型
     * @return PageableItemDTO
     * @throws NumberFormatException 异常
     * @throws ServiceException 异常
     */
    PageableItemDTO querySysItems(Integer page, Integer size, Integer sortType) throws NumberFormatException, ServiceException;

}
